package com.xxxx.server.service.impl;

import com.xxxx.server.entity.StudentTranscript;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.utils.FileUtils;
import com.xxxx.server.utils.PoiXslUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @description:
 * @author: Honors
 * @create: 2021-11-10
 */
@Service
public class FileUploadService {

    @Resource
    private CourseServiceImpl courseService;

    /**
     * 文件上传
     *
     * @param file
     */
    public RespBean uploadFile(MultipartFile file) throws IOException {
        //获取文件名
        String filePath = "";
        if (Objects.nonNull(file)) {
            //获取文件名
            String fileName = file.getOriginalFilename();
            //获取文件后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            //重新生成文件名
            filePath = FileUtils.getAbsPath() + System.currentTimeMillis() + suffixName;
            file.transferTo(new File(filePath));
        } else {
            return RespBean.error("上传文件为空！");
        }
        return RespBean.success("上传成功", filePath);
    }

    /**
     * 导出课程成绩
     *
     * @param itmId
     * @return
     */
    public RespBean export(Integer itmId) throws IOException {
        PoiXslUtils poiXslUtils = new PoiXslUtils();
        // 创建一页
        poiXslUtils.createSheet();
        List<String> headerData = new ArrayList<>();
        //组装数据
        headerData.add("课程名称");
        headerData.add("学号");
        headerData.add("姓名");
        headerData.add("作业总数");
        headerData.add("完成总数");
        headerData.add("平均分");
        headerData.add("总分");
        headerData.add("结课时间");

        // 写入第一行标题
        poiXslUtils.writeRow(headerData);

        // itmId == null，导出全部 反之导出某一门
        List<StudentTranscript> dataList = courseService.getExportDataByItmId(itmId);
        // 写入数据行
        List<String> bodyData = new ArrayList<>();
        for (StudentTranscript exportData : dataList) {
            // 课程名称
            bodyData.add(exportData.getStItmTitle());
            // 学号
            bodyData.add(exportData.getStUsername());
            // 姓名
            bodyData.add(exportData.getStName());
            // 作业总数
            bodyData.add(exportData.getStTkCount().toString());
            // 完成总数
            bodyData.add(exportData.getStCompleteCount().toString());
            // 平均分
            bodyData.add(exportData.getStAverage().toString());
            // 总分
            bodyData.add(exportData.getStTotalScore().toString());
            // 结课时间
            bodyData.add(new SimpleDateFormat("yyyy年MM月dd日").format(exportData.getStEndTime()));
            // 一个对象创建一行
            poiXslUtils.createRow();
            // 写入一行数据到文件
            poiXslUtils.writeRow(bodyData);
            // 清理容器集合
            bodyData.clear();
        }
        String path = "D:" + File.separator + "教学系统文件夹" + File.separator;
        File file = new File(path);
        if (!file.exists()) {//如果文件夹不存在
            file.mkdir();//创建文件夹
        }
//        new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒").format(new Date());
        // 导出文件至 D盘
        poiXslUtils.writeContent("D:" + File.separator + "教学系统文件夹" + File.separator
                + (itmId == 0 ? "所有成绩_" : dataList.get(0).getStItmTitle() + "成绩_") +
                System.currentTimeMillis() + ".xlsx");

        return RespBean.success("文件已导出至》--" + "D:" + File.separator + "教学系统文件夹" + File.separator);
    }

}
